package com.nlelpct.manage.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nlelpct.manage.model.dto.*;
import com.nlelpct.manage.model.entity.SysEmployee;
import com.nlelpct.manage.model.entity.SysPhoneAreaCode;
import com.nlelpct.manage.model.query.InsertAndUpdateEmployeeQuery;
import com.nlelpct.manage.model.query.SysEmployeeListByPageQuery;
import com.nlelpct.manage.model.vo.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author 刘伟涛
 * @Date 2023/7/18 16:37
 **/
public interface ISysEmployeeService extends IService<SysEmployee> {


    /**
     * 查询能否添加员工
     * @param sysEmployeeWhetherAddDto 手机号
     * @return 查询结果
     */
    ResponseResult<String> getWhetherAdd(SysEmployeeWhetherAddDto sysEmployeeWhetherAddDto);

    /**
     * 查询员工编号是否存在
     * @param validateEmployeeQuery 员工编号
     * @return 查询结果
     */
    ResponseResult<Boolean> getEmployeeNumberWhetherExist(InsertAndUpdateEmployeeQuery validateEmployeeQuery);

    /**
     * 添加员工操作
     * @param insertEmployeeQuery 员工信息
     * @return 添加结果
     */
    ResponseResult<String> addEmployee(InsertAndUpdateEmployeeQuery insertEmployeeQuery);

    /**
     * 分页查询员工列表
     * @param sysEmployeeListByPageQuery 查询条件
     * @return 查询结果
     */
    ResponseResult<PageResultVo<SysEmployeeListByPageVo>> getAllByPage(SysEmployeeListByPageQuery sysEmployeeListByPageQuery);

    /**
     * 修改员工状态
     * @param employeeId 员工id
     * @return
     */
    ResponseResult<String> updateEmployeeStatus(String employeeId);

    /**
     * 获取员工基础信息
     * @param employeeId 员工id
     * @return 员工基础信息
     */
    ResponseResult<InsertAndUpdateEmployeeQuery> getEmployeeBaseInfo(String employeeId);

    /**
     * 修改员工信息
     * @param updateEmployeeQuery 修改信息
     * @return 修改结果
     */
    ResponseResult<String> updateEmployeeBaseInfo(InsertAndUpdateEmployeeQuery updateEmployeeQuery);

    /**
     * 根据员工id重置员工密码
     * @param employeeId 员工id
     * @return 修改结果
     */
    ResponseResult<String> updateEmployeePassword(String employeeId);

    /**
     * 查询部门分级列表
     * @return 部门分级列表
     */
    ResponseResult<List<SysDeptListVo>> getDeptList();

    /**
     * 获取角色列表
     * @param employeeId 员工id
     * @return 角色列表
     */
    ResponseResult<List<SysRoleListVo>> getRoleList(String employeeId);

    /**
     * 修改员工角色关系
     * @param sysEmployeeAndRoleUpdateDto 修改数据
     * @return 修改结果
     */
    ResponseResult<String> updateEmployeeAndRole(SysEmployeeAndRoleUpdateDto sysEmployeeAndRoleUpdateDto);

    /**
     * 获取国际区号列表
     * @return 国际区号列表
     */
    ResponseResult<List<SysPhoneAreaCode>> getAreaCodeList();

    /**
     * 获取岗位列表
     * @return 岗位列表
     */
    ResponseResult<List<SysPostListVo>> getPostList();

    /**
     * 导出员工信息列表
     */
    void exportEmployeeInfo(List<String> ids, HttpServletResponse response);


    /**
     * 获取员工列表
     * @return 员工列表
     */
    ResponseResult<List<SysEmployee>> getSysEmployeeList();

    /**
     * 通过部门id获取员工列表
     * @return 员工列表
     */
    ResponseResult<List<SysEmployee>> getSysEmployeeListByDeptIds(List<String> deptIds);
}
